package dao

import (
	"time"
)

// 这是 Category 的全局公开dao对象，被service层调用!
var CategoryDao = categoryDao{}

// 类目表
// 这是 category表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Category struct {
	Id         int32     `json:"id" form:"id" v:"id" db:"id"`
	Name       string    `json:"name" form:"name" v:"name" db:"name"`                 // 类目名称
	Keywords   string    `json:"keywords" form:"keywords" v:"keywords" db:"keywords"` // 类目关键字，以JSON数组格式
	Desc       string    `json:"desc" form:"desc" v:"desc" db:"desc"`                 // 类目广告语介绍
	Pid        int32     `json:"pid" form:"pid" v:"pid" db:"pid"`                     // 父类目ID
	IconUrl    string    `json:"icon_url" form:"icon_url" v:"icon_url" db:"icon_url"` // 类目图标
	PicUrl     string    `json:"pic_url" form:"pic_url" v:"pic_url" db:"pic_url"`     // 类目图片
	Level      string    `json:"level" form:"level" v:"level" db:"level"`
	SortOrder  int8      `json:"sort_order" form:"sort_order" v:"sort_order" db:"sort_order"`     // 排序
	AddTime    time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`             // 创建时间
	UpdateTime time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"` // 更新时间
	Deleted    int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`    // 逻辑删除

}

// 注意:这是 Category 的私有dao对象，只能在dao层内使用!
type categoryDao struct {
	InsertTemplate func(arg Category) (int64, error)          //插入一条记录
	UpdateTemplate func(arg Category) (int64, error)          //更新一条记录
	DeleteTemplate func(id int64) (int64, error)              `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Category, error)           `args:"id"` //根据传入的主键获取一条记录
	List           func(arg CategoryList) ([]Category, error) //模糊分页查询
}

/*
// 这是 category 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type CategoryPostman struct {
id
name
keywords
desc
pid
icon_url
pic_url
level
sort_order
add_time
update_time
deleted

}*/

// 这是 category 表的批量请求参数
type CategoryReq struct {
	List []Category `json:"list" form:"list"`
}

// 这是 categoryDao.List()方法的请求参数
type CategoryList struct {
	Page
}
